#ifndef RENDERER_HEADER
#define RENDERER_HEADER

#include <windows.h>  // Header File For Windows
#include "../../Dependencies.h"
#include "../glut.h"
#include "../glm.h"

class Renderer {
protected:
	HINSTANCE hInstance;// Holds The Instance Of The Application
	WNDPROC WndProc;	// Holds The WndProc of Windows
	HWND hWnd;			// Holds Our Window Handle
	HDC hDC;			// Private GDI Device Context

	bool fullscreen;    // Fullscreen Flag
	char* windowName;	// Name of the window
	int windowWidth;	// Width of the window
	int windowHeight;	// Height of the window
	int bits;			// Number Of Bits To Use For Color (8/16/24/32)
	
public:
	Renderer(WNDPROC);
	virtual ~Renderer();

	virtual void ReSizeScene(int,int) =0;		// Resize the window
	void ToggleFullScreenMode(void);	// Toggle between fullscreen and window mode

	virtual bool CreateAWindow(void)=0;			// Create the window
	virtual void KillWindow(void)=0;			// Destroy the window

	virtual void startDrawingScene(void)=0;		// Start drawing the scene
	virtual void stopDrawingScene(void)=0;		// Stop drawing the scene

	virtual void enterContext()=0;
	virtual void exitContext()=0;
	virtual void drawTriangle(POINT3D, POINT3D, POINT3D, COLOR)=0;
	virtual void drawRectangle(POINT3D, POINT3D, POINT3D, POINT3D, COLOR, bool)=0;
	virtual void drawLine(POINT3D, POINT3D, COLOR)=0;
	virtual void scale(POINT3D)=0;
	virtual void rotate(ORIENTATION)=0;
	virtual void translate(POINT3D) =0;
	virtual int LoadRawFile(LPSTR strName, int nSize, BYTE *pHeightMap, int sizex, int sizey) = 0;
	//virtual void drawModel(char modelName[10], float translatex, float translatey, float translatez,double angle) = 0;
	virtual void drawPieceQuad(char texturename[10], GLfloat s, GLfloat t, GLfloat r, POINT3D position, ORIENTATION orientation, SCALE scale, int sizex, int sizey, COLOR color) = 0;
	virtual void writeOnScreen(std::string s, GLdouble x, GLdouble y, int fontsize, COLOR color) = 0;
};
#endif